home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / CIncludes / DriverFamilyMatching.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-17  |  6.6 KB  |  215 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        DriverFamilyMatching.h
  3.  
  4.      Contains:    Interfaces for create native drivers NDRV
  5.  
  6.      Version:    Technology:    
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1995-1998 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __DRIVERFAMILYMATCHING__
  18. #define __DRIVERFAMILYMATCHING__
  19.  
  20. #ifndef __MACTYPES__
  21. #include <MacTypes.h>
  22. #endif
  23. #ifndef __NAMEREGISTRY__
  24. #include <NameRegistry.h>
  25. #endif
  26. #ifndef __CODEFRAGMENTS__
  27. #include <CodeFragments.h>
  28. #endif
  29.  
  30.  
  31.  
  32. #if PRAGMA_ONCE
  33. #pragma once
  34. #endif
  35.  
  36. #ifdef __cplusplus
  37. extern "C" {
  38. #endif
  39.  
  40. #if PRAGMA_IMPORT
  41. #pragma import on
  42. #endif
  43.  
  44. #if PRAGMA_STRUCT_ALIGN
  45.     #pragma options align=mac68k
  46. #elif PRAGMA_STRUCT_PACKPUSH
  47.     #pragma pack(push, 2)
  48. #elif PRAGMA_STRUCT_PACK
  49.     #pragma pack(2)
  50. #endif
  51.  
  52. /*
  53.   ##############################################
  54.    Well known properties in the Name Registry
  55.   ##############################################
  56. */
  57.  
  58. #define kPropertyName                    "name"
  59. #define kPropertyCompatible                "compatible"
  60. #define    kPropertyDriverPtr                "driver-ptr"
  61. #define kPropertyDriverDesc                "driver-description"
  62. #define kPropertyReg                    "reg"
  63. #define kPropertyAAPLAddress            "AAPL,address"
  64. #define kPropertyMatching                "matching"
  65.  
  66. /* CPassThru */
  67. /*
  68.   #########################################################
  69.    Descriptor for Drivers and NDRVs
  70.   #########################################################
  71. */
  72. /* 
  73.     QuickTime 3.0: "DriverType" has a name collision with cross-platform code.
  74.     Use Mac prefix to avoid collision 
  75. */
  76. /* Driver Typing Information Used to Match Drivers With Devices */
  77.  
  78. struct MacDriverType {
  79.     Str31                             nameInfoStr;                /* Driver Name/Info String*/
  80.     NumVersion                         version;                    /* Driver Version Number*/
  81. };
  82. typedef struct MacDriverType            MacDriverType;
  83. #if TARGET_OS_MAC
  84.  
  85. typedef MacDriverType                     DriverType;
  86. #endif  /* TARGET_OS_MAC */
  87.  
  88. typedef MacDriverType *                    DriverTypePtr;
  89. /* OS Runtime Information Used to Setup and Maintain a Driver's Runtime Environment */
  90. typedef OptionBits                         RuntimeOptions;
  91.  
  92. enum {
  93.     kDriverIsLoadedUponDiscovery = 0x00000001,                    /* auto-load driver when discovered*/
  94.     kDriverIsOpenedUponLoad        = 0x00000002,                    /* auto-open driver when loaded*/
  95.     kDriverIsUnderExpertControl    = 0x00000004,                    /* I/O expert handles loads/opens*/
  96.     kDriverIsConcurrent            = 0x00000008,                    /* supports concurrent requests*/
  97.     kDriverQueuesIOPB            = 0x00000010,                    /* device manager doesn't queue IOPB*/
  98.     kDriverIsLoadedAtBoot        = 0x00000020,                    /* Driver is loaded at the boot time */
  99.     kDriverIsForVirtualDevice    = 0x00000040,                    /* Driver is for a virtual Device */
  100.     kDriverSupportDMSuspendAndResume = 0x00000080                /* Driver supports Device Manager Suspend and Resume command */
  101. };
  102.  
  103.  
  104. struct DriverOSRuntime {
  105.     RuntimeOptions                     driverRuntime;                /* Options for OS Runtime*/
  106.     Str31                             driverName;                    /* Driver's name to the OS*/
  107.     UInt32                             driverDescReserved[8];        /* Reserved area*/
  108. };
  109. typedef struct DriverOSRuntime            DriverOSRuntime;
  110. typedef DriverOSRuntime *                DriverOSRuntimePtr;
  111. /* OS Service Information Used To Declare What APIs a Driver Supports */
  112.  
  113. typedef UInt32                             ServiceCount;
  114.  
  115. struct DriverServiceInfo {
  116.     OSType                             serviceCategory;            /* Service Category Name*/
  117.     OSType                             serviceType;                /* Type within Category*/
  118.     NumVersion                         serviceVersion;                /* Version of service*/
  119. };
  120. typedef struct DriverServiceInfo        DriverServiceInfo;
  121. typedef DriverServiceInfo *                DriverServiceInfoPtr;
  122.  
  123. struct DriverOSService {
  124.     ServiceCount                     nServices;                    /* Number of Services Supported*/
  125.     DriverServiceInfo                 service[1];                    /* The List of Services (at least one)*/
  126. };
  127. typedef struct DriverOSService            DriverOSService;
  128. typedef DriverOSService *                DriverOSServicePtr;
  129. /* Categories */
  130.  
  131. enum {
  132.     kServiceCategoryDisplay        = FOUR_CHAR_CODE('disp'),        /* Display Manager*/
  133.     kServiceCategoryOpenTransport = FOUR_CHAR_CODE('otan'),        /* Open Transport*/
  134.     kServiceCategoryBlockStorage = FOUR_CHAR_CODE('blok'),        /* Block Storage*/
  135.     kServiceCategoryNdrvDriver    = FOUR_CHAR_CODE('ndrv'),        /* Generic Native Driver*/
  136.     kServiceCategoryScsiSIM        = FOUR_CHAR_CODE('scsi'),        /* SCSI */
  137.     kServiceCategoryFileManager    = FOUR_CHAR_CODE('file'),        /* File Manager */
  138.     kServiceCategoryIDE            = FOUR_CHAR_CODE('ide-'),        /* ide */
  139.     kServiceCategoryADB            = FOUR_CHAR_CODE('adb-'),        /* adb */
  140.     kServiceCategoryPCI            = FOUR_CHAR_CODE('pci-'),        /* pci bus */
  141.                                                                 /* Nu Bus */
  142.     kServiceCategoryDFM            = FOUR_CHAR_CODE('dfm-'),        /* DFM */
  143.     kServiceCategoryMotherBoard    = FOUR_CHAR_CODE('mrbd'),        /* mother Board */
  144.     kServiceCategoryKeyboard    = FOUR_CHAR_CODE('kybd'),        /* Keyboard */
  145.     kServiceCategoryPointing    = FOUR_CHAR_CODE('poit'),        /* Pointing */
  146.     kServiceCategoryRTC            = FOUR_CHAR_CODE('rtc-'),        /* RTC */
  147.     kServiceCategoryNVRAM        = FOUR_CHAR_CODE('nram'),        /* NVRAM */
  148.     kServiceCategorySound        = FOUR_CHAR_CODE('sond'),        /* Sound (1/3/96 MCS) */
  149.     kServiceCategoryPowerMgt    = FOUR_CHAR_CODE('pgmt'),        /* Power Management */
  150.     kServiceCategoryGeneric        = FOUR_CHAR_CODE('genr')        /* Generic Service Category to receive general Events */
  151. };
  152.  
  153. /* Ndrv ServiceCategory Types */
  154.  
  155. enum {
  156.     kNdrvTypeIsGeneric            = FOUR_CHAR_CODE('genr'),        /* generic*/
  157.     kNdrvTypeIsVideo            = FOUR_CHAR_CODE('vido'),        /* video*/
  158.     kNdrvTypeIsBlockStorage        = FOUR_CHAR_CODE('blok'),        /* block storage*/
  159.     kNdrvTypeIsNetworking        = FOUR_CHAR_CODE('netw'),        /* networking*/
  160.     kNdrvTypeIsSerial            = FOUR_CHAR_CODE('serl'),        /* serial*/
  161.     kNdrvTypeIsParallel            = FOUR_CHAR_CODE('parl'),        /* parallel */
  162.     kNdrvTypeIsSound            = FOUR_CHAR_CODE('sond'),        /* sound*/
  163.     kNdrvTypeIsBusBridge        = FOUR_CHAR_CODE('brdg')
  164. };
  165.  
  166.  
  167. typedef UInt32                             DriverDescVersion;
  168. /*    The Driver Description */
  169.  
  170. enum {
  171.     kInitialDriverDescriptor    = 0,
  172.     kVersionOneDriverDescriptor    = 1
  173. };
  174.  
  175.  
  176. enum {
  177.     kTheDescriptionSignature    = FOUR_CHAR_CODE('mtej'),
  178.     kDriverDescriptionSignature    = FOUR_CHAR_CODE('pdes')
  179. };
  180.  
  181.  
  182.  
  183. struct DriverDescription {
  184.     OSType                             driverDescSignature;        /* Signature field of this structure*/
  185.     DriverDescVersion                 driverDescVersion;            /* Version of this data structure*/
  186.     MacDriverType                     driverType;                    /* Type of Driver*/
  187.     DriverOSRuntime                 driverOSRuntimeInfo;        /* OS Runtime Requirements of Driver*/
  188.     DriverOSService                 driverServices;                /* Apple Service API Membership*/
  189. };
  190. typedef struct DriverDescription        DriverDescription;
  191. typedef DriverDescription *                DriverDescriptionPtr;
  192.  
  193.  
  194.  
  195. #if PRAGMA_STRUCT_ALIGN
  196.     #pragma options align=reset
  197. #elif PRAGMA_STRUCT_PACKPUSH
  198.     #pragma pack(pop)
  199. #elif PRAGMA_STRUCT_PACK
  200.     #pragma pack()
  201. #endif
  202.  
  203. #ifdef PRAGMA_IMPORT_OFF
  204. #pragma import off
  205. #elif PRAGMA_IMPORT
  206. #pragma import reset
  207. #endif
  208.  
  209. #ifdef __cplusplus
  210. }
  211. #endif
  212.  
  213. #endif /* __DRIVERFAMILYMATCHING__ */
  214.  
  215.